/*
* Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.switchyard.component.bpel.osgi;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import javax.transaction.TransactionManager;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
import org.riftsaw.engine.BPELEngine;
import org.riftsaw.engine.ServiceLocator;
import org.riftsaw.engine.internal.BPELEngineImpl;
import org.riftsaw.engine.internal.DeploymentManager;
/**
* Simple class for creating BPELEngine beans through blueprint.
*/
public class BPELEngineFactory {
private ServiceLocator _serviceLocator;
private Properties _configuration;
private TransactionManager _transactionManager;
/**
* @return a new BPELEngine instance
* @throws Exception if something goes awry
*/
public BPELEngine createEngine() throws Exception {
final ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
final BPELEngineImpl engine = new BPELEngineImpl();
engine.setTransactionManager(_transactionManager);
engine.setDeploymentManager(createDeploymentManager());
engine.init(_serviceLocator, _configuration);
return engine;
} finally {
Thread.currentThread().setContextClassLoader(oldLoader);
}
}
/**
* @param serviceLocator service locator to use for new engines
*/
public void setServiceLocator(ServiceLocator serviceLocator) {
_serviceLocator = serviceLocator;
}
/**
* @param configuration configuration to use for new engines
*/
public void setConfiguration(Properties configuration) {
_configuration = configuration;
}
/**
* @param transactionManager transaction manager to use for new engines
*/
public void setTransactionManager(TransactionManager transactionManager) {
_transactionManager = transactionManager;
}
private DeploymentManager createDeploymentManager() throws IOException {
final DeploymentManager manager = new DeploymentManager();
manager.setDeploymentFolder(getDeploymentsDirectory().getCanonicalPath());
return manager;
}
private File getDeploymentsDirectory() {
final Bundle bundle = FrameworkUtil.getBundle(getClass());
final File dataDirectory = bundle.getDataFile("");
final File deploymentsDirectory = new File(dataDirectory, "deployments");
if (!deploymentsDirectory.exists()) {
deploymentsDirectory.mkdir();
deploymentsDirectory.deleteOnExit();
}
return deploymentsDirectory;
}
}